package com.zyzd.commontools.utils;

import android.content.Context;
import android.os.Environment;

import com.zyzd.commontools.AppContext;

import java.io.File;

/**
 * 数据删除工具类
 *
 * @author FireAnt（http://my.oschina.net/LittleDY）
 * @version 创建时间：2014年10月27日 上午10:18:22
 */
public class DataCleanManager {

    /**
     * 清除本应用内部缓存(/data/data/com.xxx.xxx/cache)
     */
    public static void cleanInternalCache() {
        FileUtils.deleteFile(getContext().getCacheDir());
    }

    /**
     * 清除本应用所有数据库(/data/data/com.xxx.xxx/databases)
     */
    public static void cleanDatabases() {
        FileUtils.deleteFile(FileUtils.getDatabaseDir());
    }

    /**
     * 清除本应用SharedPreference文件
     * 该框架可以使用： deleteFilesByDirectory(FileUtils.getSharedPreferenceDir());
     */
    public static void cleanSharedPreference(SpUtil... sharedPreferences) {
        for (SpUtil sp : sharedPreferences) {
            sp.clear();
        }
    }

    /**
     * 按名字清除本应用数据库
     *
     * @param dbName
     */
    public static void cleanDatabaseByName(String dbName) {
        getContext().deleteDatabase(dbName);
    }

    /**
     * 清除/data/data/com.xxx.xxx/files下的内容
     */
    public static void cleanFiles() {
        FileUtils.deleteFile(FileUtils.getFilesDir());
    }

    /**
     * 清除外部cache下的内容
     */
    public static void cleanExternalCache() {
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            FileUtils.deleteFile(FileUtils.getExternalCacheDir());
        }
    }


    /**
     * 清除本应用所有的数据
     *
     * @param filepath
     */
    public static void cleanApplicationData(String... filepath) {
        cleanInternalCache();
        cleanExternalCache();
        cleanDatabases();
        cleanSharedPreference(SpUtil.CACHE, SpUtil.LASTING);
        cleanFiles();
        for (String filePath : filepath) {
            FileUtils.deleteFile(filePath);
        }
    }


    private static Context getContext() {
        return AppContext.getContext();
    }


    /**
     * @param files
     * @return 获取缓存的大小
     * @throws Exception
     */
    public static String getCacheSize(File... files) {
        double total = 0;
        total += FileUtils.getFileSize(FileUtils.getCacheDir());
        total += FileUtils.getFileSize(FileUtils.getExternalCacheDir());
        total += FileUtils.getFileSize(FileUtils.getSharedPreferenceDir());
        for (File file : files) {
            total += FileUtils.getFileSize(file);
        }
        return FileUtils.getFormatSize(total);
    }


}
